跳至主要内容

Request/Selenium

來點自己的小工具吧(我大爬蟲篇)

Request/Selenium Fan Kang Ting


還記得Axios?

自家講義

let url="..."
let config={
user:"Little fish周咏陞"
spydog:true
}
this.axios.post(url,config)
.then((res)=>console.log(res.data))
.catch((error)=>console.log(error))

當然Axios適用於JavaScript上黑

那同樣今天要用的請求工具適用在Python上(Request/Selenium)


補充:事實上在使用JSON格式的資料時要先解析/字串化=>

  • 解析 JSON.parser(JSON本人)
  • 字串化 JSON.stringfy(JSON本人)

你是不是想說之前在實作的時候明明都不需要用到他阿 我看都沒看過 不!!!


那是因為AXIOS這個Module 的資料會自動轉換 方便多了


建立觀念

參考資料 關於httprequest 簡單來說你從瀏覽器看到網頁是需要使用GET Request才能看到的


認識一下常見的Http Method

比如我們常在建立資料Router時常見的CRUD 分別代表POST,GET,PUT,DELETE 各種http method 其中POST(新增)跟PUT(修改)是可以夾帶參數的 通常我們會把參數寫成JSON config


備註UPDATE

CRUD的U(update) 可以是PUT或是PATCH 通常意義上 PUT是指大範圍的UPDATE(比如整組資料修改) PATCH指小範圍的UPDATE(比如修改某個欄位修改)


你可能會覺得? 為甚麼不都用POST就好

因為在Web Service後端設計上,通常我們要操作Model(資料模型)的使用方法會寫在同一個Class(類別)上


假如都使用POST去來進行UPDATE會發生甚麼事情呢?
  1. 你必須建立另一個Class
  2. 建立額外的路由(Controller/Router)
  3. 程式碼不簡潔(忌諱)
  4. API代理問題
  5. 還有很多問題 這裡就不多說

Http status code

蝦 沒聽過?! 不可能 至少你有看過


範例

Google掛掉的時候 你就會看到了 黑對 404(No Found)就是其中之一


Staus Code概欄


常見 statuscode


額外介紹 Postman

後端測試的好捧由 Link


了解了嗎? 正題開始


安裝Requests 與Selenium

這裡順便提一下pipenv

pip3 install pipenv #安裝pipenv
mkdir request_train #建立專案資料夾
cd requset_train
pipenv install #pipenv初始化專案資料夾
pipenv install requests #用pipenv install 即可安裝至Local
pipenv install selenium
pipenv install webdriver-manager

建立main. py

順便提一下我們主程式的進入點 讓你的main.py長這樣

import requests
from selenium import webdriver

def main():
pass
#程式進入點
if __name__ =="__main__":
main()

使用基本功能

import requests
from selenium import webdriver
from bs4 import BeautifulSoup#注意這個 pipenv install bs4
def main():
url="https://www.ptt.cc/bbs/MobileComm/index.html"#需要操作的網址
r = requests.get(url) #將網頁資料GET下來
soup = BeautifulSoup(r.text,"html.parser") #將網頁資料以html.parser 這裡有使用BeautifulSoup 套件大家也可以安裝看看 雖然我平常不用
sel = soup.select("div.title a") #取HTML標中的 <div class="title"></div> 中的<a>標籤存入sel
for s in sel:
print(s["href"], s.text)

#程式進入點
if __name__ =="__main__":
main()

算了還是請大家裝一下 bs4好了

pipenv install bs4

當然前面的範例只是GET 當然其他方法也適用

假設我使用 需要夾帶參數的POST

payload={ #須送之參數
'from':'/bbs/Gossiping/index.html',
'yes':'yes'
}
requests.post("https://www.ptt.cc/ask/over18",data=payload) #將參數寫至data

阿這有甚麼厲害的嗎


答案 沒有

不過好玩的來了


Selenium


啥東西?

他可以模擬你瀏覽器的一切操作 也就是人家說的爬蟲腳本機器人的重要製作工具之一


使用他前 需要把電腦上的瀏覽器更新到最新(建議)

並且下載Web driver (模擬瀏覽器的引擎) Chrome Driver引擎載點 找到你適合得版本


將你的Python File跟Chrome Dirver放在同一目錄下(或者設定路徑)

操作範例

# !/usr/bin/python
# coding:utf-8
from selenium import webdriver
from selenium.webdriver.support.ui import Select,WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import requests
from bs4 import BeautifulSoup
import io
import time
drivePath="C:\\Users\cxz12\Downloads\chromedriver.exe"#chromedriver path

browser=webdriver.Chrome()#open browser


for i in range(0,1000):
if(i<100):
if(i<10):
i=("00"+str(i))
else:
i=("0"+str(i))
url="http://140.125.95.10/term1102/network/homework/doc/p6.docx"+str(i)+".doc"
# url="http://140.125.95.10/term1101/phpdb/practice/doc/p14"+str(i)+".doc"
browser.get(url)

就這樣而已? 你錯了還可以搞很多東西

就交給各位探索拉